<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>reflect方法的演示</title>
</head>

<body>
    <script>
        const user = { name: 'jack', age: 20 }
        // reflect中的某些方法和object是类似的
        // Object.defineProperty
        Object.defineProperty(user, 'score', {
            get() {
                return 100
            }
        })

        // Object.defineProperty(user, 'score', {
        //     get() {
        //         return 99
        //     }
        // })
        // 如果重新定义了某个属性的话，会出现报错  JS是单线程的，有一行报错的，后面的都不再执行
        // 如果规避这个错误的话,可以使用cry catch包裹

        let u1 = Reflect.defineProperty(user, 'score', {
            get() {
                return 100
            }
        })

        // let u2 = Reflect.defineProperty(user, 'score', {
        //     get() {
        //         return 99
        //     }
        // })
        // 使用Reflect即使重复定义了某个属性，依然不会报错, 这样可以保证程序继续执行
        // 这样的话，Reflect容错性会更好一些, 是用true或是false来表示的
        console.log(user)
        console.log(u1)
    </script>
</body>

</html>